from app.core.logger import TraceID, logger
from app.services.wp_service import query_wp_product_pair
from app.schemas.waveup.trading_pair import WPTradingPairCreate, WPTradingPairUpdate
from app.crud.waveup.trading_pair import get_by_product_pair_id, create_trading_pair, update_trading_pair
from app.core.task_db import TaskDBSession

async def sync_trading_pair():
    """同步交易对"""
    TraceID.set()
    logger.info("开始同步交易对...")
    # 1. 查询交易对信息
    resp = await query_wp_product_pair()
    logger.info(f"查询交易对响应: {resp}")
    if resp["rc"] != 0:
        logger.error(f"查询交易对失败: {resp}")
        return
    # 2. 解析响应数据
    totalPage = resp["data"]["totalPage"]
    logger.info(f"总页数: {totalPage}")
    pairs = resp["data"]["records"]
    
    for pageNo in range(1, totalPage + 1):
        if pageNo > 1:
            logger.info(f"查询第 {pageNo} 页交易对...")
            resp = await query_wp_product_pair(pageNo=pageNo)
            if resp["rc"] != 0:
                logger.error(f"查询第 {pageNo} 页交易对失败: {resp}")
                return
            pairs = resp["data"]["records"]
        
        for pair in pairs:
            logger.info(f"交易对: {pair}")
            # 查询是否已存在
            async with TaskDBSession() as db_session:
                existing_pair = await get_by_product_pair_id(db_session, pair["productPairId"])
                if existing_pair:
                    logger.info(f"交易对 {pair['productPairId']} 已存在，更新交易对数据")
                    # 更新交易对
                    trading_pair_update = WPTradingPairUpdate.model_validate(pair)
                    await update_trading_pair(db_session, trading_pair_update)
                else:
                    # 创建交易对
                    trading_pair_in = WPTradingPairCreate.model_validate(pair)
                    await create_trading_pair(db_session, trading_pair_in)

        
    logger.info("同步交易对完成")